package cn.liontalk.demo;

/**
 *
 * 总说来日方长，谁知，蓦然，便青丝变白首。请记住，你曾是少年。
 *
 * @author: 周哲
 * @package: cn.liontalk.demo
 * @description:
 * @date: 2019/1/26 11:57
 * @version: V1.0
 */


/**
 *  1 两个线程同时访问一个对象的同步方法
 *
 *      顺序执行
 *
 *
 *  2 两个线程访问的是两个对象的同步方法
 *
 *      对象指的是不同的实例 同时并行执行 真正采用的锁对象不是同一个
 *
 *  3 两个线程访问的是synchronized 的静态方法
 *      会一个一个的执行
 *
 *  4 同时访问同步方法和非同步方法
 *
 *      两个线程同时执行，并且同时结束 非同步方法不受到影响
 *
 *
 *   5 访问同一个对象的不同的普通同步方法
 *
 *      顺序执行每一个同步方法
 *
 *
 *   6 同时访问静态synchronized 和非静态synchronized的方法
 *
 *
 *      方法同时执行
 *
 *   7  方法抛异常之后，会释放锁
 *
 *       抛出异常之后，由jvm在自动释放锁 然后由下面的线程获取新的锁
 *
 *
 *
 *   什么是可重入：
 *     指的是同一线程的外层函数获得锁之后，内层函数可以直接再次获取该锁
 *
 *    好处: 避免死锁 提升封性
 *
 *
 *
 */
public class DisappearRequest1 implements Runnable {

    static  int j = 0;

    static DisappearRequest1 instance = new DisappearRequest1();

    public void run() {
        for (int i = 0; i < 10000; i++) {
            j++;
        }
    }


    public static void main(String[] args) {

        Thread thread = new Thread(instance);
        Thread thread2 = new Thread(instance);

        thread.start();
        thread2.start();

        while (thread.isAlive() || thread2.isAlive()) {

        }
        System.out.println("j = " + j  );
        System.out.println("Finished.....");
    }
}
